/**
 * 
 */
package org.gigi.security.repository;

import java.util.List;

import org.gigi.core.Page;
import org.gigi.security.domain.Group;
import org.gigi.security.domain.GroupUser;
import org.gigi.security.domain.User;

/**
 * 用户组持久层接口
 *
 * @author Eugene Wang 2011-9-1
 * @see
 */
public interface GroupRepository {

	/**
	 * 新创建一个用户组。
	 * @param group
	 */
	void create(Group group);

	/**
	 * 根据ID获取用户组。
	 * @param id
	 * @return
	 */
	Group findById(long id);

	/**
	 * 删除用户组。
	 * @param group
	 */
	void delete(Group group);

	/**
	 * 更新用户组。
	 * @param group
	 */
	void update(Group group);

	/**
	 * 获取父节点的子节点。
	 * @param parentId
	 * @return
	 */
	List<Group> findChildren(long parentId);

	/**
	 * 获取用户组用户列表
	 * @param group
	 * @param page
	 * @return
	 */
	Page<User> getUserPage(Group group, Page<User> page);

	/**
	 * 添加用户组用户。
	 * @param groupUsers
	 */
	void addUsers(List<GroupUser> groupUsers);

	/**
	 * 删除用户组用户。
	 * @param groupUsers
	 */
	void removeUsers(List<GroupUser> groupUsers);

	/**
	 * 获取不属于用户组用户列表
	 * @param group
	 * @param page
	 * @return
	 */
	Page<User> getNonUserPage(Group group, Page<User> page);
}
